A bi-directionally programmable memory device is one that uses the same technique to write either a “0” bit or a “1” bit to a memory cell. To program a bi-directionally programmable memory, the user simply writes the desired value to the memory, thus replacing the previous with the new contents. Thus, when n cells are programmed in this manner, between zero and n memory cells will change their values, depending on the current state and the desired state of those cells.